gl renderer: Ignore rounded clip that only increase the clip
authorTimm Bäder <mail@baedert.org>
Fri, 3 Jul 2020 04:41:29 +0000 (06:41 +0200)
committerTimm Bäder <mail@baedert.org>
Fri, 17 Jul 2020 03:49:11 +0000 (05:49 +0200)
This fixes the widget factory rendering too much.

In the widget-factory, we generally have a pretty small update area (two
spinners and a progressbar). We take the extents of that as a update
area and inital clip.

However, the first clip node we see is from the toplevel window, which
essentially increases the clip again to almost the entire window.

Fix that by ignoring such cases.

gsk/gl/gskglrenderer.c

index 130971e7b969d7806d6641fbb04ea41aa9cf2e38..699da4f35dc33feb12bacc6f30237717d5094714 100644 (file)
@@ -1313,6 +1313,15 @@ render_rounded_clip_node (GskGLRenderer       *self,
           transformed_clip.corner[i].height = clip->corner[i].height * scale;
         }
 
+      /* If the new clip entirely contains the current clip, the intersection is simply
+       * the current clip, so we can ignore the new one */
+      if (rounded_inner_rect_contains_rect (&transformed_clip, &builder->current_clip->bounds))
+        {
+          gsk_gl_renderer_add_render_ops (self, child, builder);
+          return;
+        }
+
+      /* TODO: Intersect current and new clip */
       ops_push_clip (builder, &transformed_clip);
       gsk_gl_renderer_add_render_ops (self, child, builder);
       ops_pop_clip (builder);